#include <iostream>
#include <stdlib.h>
#include <string>
#include <time.h>
#include "../lib/Constantes.h"
#include "../lib/Logger.h"
#include "../lib/Util.h"

#define PROCESS_NAME "GENERADOR_DE_ASCENSORES"
#define ERROR_ARGS -1

using namespace std;

void log(string message) {
	string name = PROCESS_NAME;
	string msg = name + ": " +  message;
	Logger::getInstance()->loggearLog(msg);
}

void debug(string message) {
	string name = PROCESS_NAME;
	string msg = name + ": " +  message;
	Logger::getInstance()->loggearDebug(msg);
}

string getString(int value) {
	char texto[32];
	sprintf(texto, "%d", value);
	string message = texto;
	return message;
}

// Generador de personas
int main(int argc, char * argv[]) {
	/* Control de parametros
	 * 1 - cantidad de ascensores del edificio
	 * 2 - cantidad de pisos del edificio
	 * 3 - velocidadde desplazamiento del ascensor
	 * 4 - modo debug
	 * 5 - modo log
	 * 6 - modo synchro
	 * 7 - modo cout
	 * 8 - capacidadAscensor
	 */
	string msg;
	if (argc < 8) {
		cout << "Faltan parametros para instanciar el Generador de Ascensores." << endl;
		exit(ERROR_ARGS);
	}
	// Inicializamos el logger
	Logger::getInstance()->setFlags(atoi(argv[4]), atoi(argv[5]), atoi(argv[6]),
			atoi(argv[7]));
	log("Generador de ascensores empieza a trabajar.");
	msg = "Voy a crear " + getString(atoi(argv[1])) + " ascensores y despues termino mi ejecucion.";
	debug(msg);
	for (int i = 0; i < atoi(argv[1]); i++) {
		pid_t ascensor = fork();
		// HIJO
		if (ascensor == 0) {
			debug("Por iniciar el Ascensor " + Util::intToString(i));
			//Proceso Ascensor
			execl("../Ascensor/Debug/Ascensor", "GeneradorDeAscensores",
					argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[1],argv[8], Util::intToString(i).c_str() ,NULL);
			msg = "Error al iniciar el Ascensor " + getString(i);
			debug(msg);
			exit(0);
		}
		// PADRE
		else {
			if (ascensor < 0) {
				msg = "Error al crear el ascensor " + getString(i) + " (fork).";
				log(msg);
			} else {
				msg = "Ascensor " + getString(i) + " generado con éxito.";
				log(msg);
			}
		}
	}
	log("Fin del generador de ascensores.");
	exit(0);
}
